package com.xingkeduo.gateway.authority.domain;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.xingkeduo.gateway.authority.pojo.Token;
import com.xingkeduo.gateway.authority.service.AuthService;
import com.xingkeduo.util.pojo.exception.AuthorityException;

/**
 * 消费者鉴权
 * 
 * @author GJ
 * @time 2019年1月14日 下午4:47:11
 * @description
 */
@Component
public class CustomerDomain {
	@Autowired
	private AuthService authService;

	/**
	 * 创建授权
	 * 
	 * @author GJ
	 * @time 2019年3月30日 上午11:16:46
	 * @param singleToken
	 * @throws Throwable
	 */
	public void createAuth(Token token) throws Throwable {
		authService.createToken(token);
	}

	/**
	 * 创建access_token
	 * 
	 * @author GJ
	 * @time 2019年1月23日 下午5:59:23
	 * @param credential
	 * @throws Throwable
	 */
	public void createAccessToken(Token token) throws Throwable {
		verifyRefreshToken(token);
		authService.createAccessToken(token);
	}

	/**
	 * 验证access_token
	 * 
	 * @author GJ
	 * @time 2019年1月23日 下午5:59:23
	 * @param credential
	 * @throws Throwable
	 */
	public String verifyAccessToken(Token token) throws Throwable {
		return authService.verifyAccessToken(token);
	}

	/**
	 * 验证refresh_token
	 * 
	 * @author GJ
	 * @time 2019年1月23日 下午6:29:26
	 * @param credential
	 * @throws Throwable
	 */
	public void verifyRefreshToken(Token token) throws Throwable {
		if (!authService.verifyRefreshToken(token))
			throw new AuthorityException(AuthorityException.Type.LOGIN);
	}
}
